#ifndef EDITORWINDOW_H
#define EDITORWINDOW_H


#include "EditorBase.h"
#include "MarkdownWindow.h"
#include "CppWindow.h"
#include "HtmlWindow.h"
#include "XMLWindow.h"
#include "HWindow.h"
#include "JsonWindow.h"
#include "HeadFiles.h"
#include "Config.h"
#include "TabWidgetMoreButton.h"
#include "MarkDownPreviewButton.h"
#include "MarkDownEditButton.h"
#include "MarkDownPreviewAndEditButton.h"

namespace hps {

class EditorBase;

// 编辑器的窗口
class EditorWindow: public QWidget {
Q_OBJECT

public:
    EditorWindow(QWidget *parent);

    // 初始化各种组件
    void init();
    // 设置组件
    void setEditorUi();
    // 展示笔记模块的提示
    void showFirstPage();
    // 隐藏笔记模块的提示
    void hideFirstPage();
    // 隐藏tabWidget
    void hideTabWidget();
    // 增加编辑页
    void addEditPage(hps::EditorBase *editor);
    // 通过文件名增加编辑页面
    void addEditPage(std::string filePath);
    // 展示tabWidget
    void showTbaWidget();
    // 保存当前的文件
    void saveCurrentFile();
    // 当前文件是否保存
    bool isSaveCurFile();
    // 将已经保存的文将从list中剔除
    void removeSavedFile(EditorBase *editor);

    // 分析文件类型
    FileType::Type checkFileType(const std::string &path);
    void rspFunc();

    QTabWidget *getTabWidget() const { return m_editorTabMgr; }

    // 显示markdown相关的按钮
    bool isShowMarkDownButtons(EditorBase* editor);
    void showMarkDownButtons();
    void hideMarkDownButtons();




public slots:
    // 关闭编辑页
    void closeEditTab(int index);
    // 显示tabidget菜单
    void showTabWidgetMenu();
    // 获取页面变化下标
    void getChangePageIndex(int index);
    // 处理点击MarkDown相关按钮, 显示、隐藏MarkDown预览页面
    void showMDPreview();
    void hideMDPreview();
    void showMDEdit();
    void hideMDEdit();
    void showEditAndPreview();

    void setEditFont();
    void closeAllTab();
protected:
    void keyPressEvent(QKeyEvent *event) override;
private:
    QVBoxLayout *m_layout;

    // 编辑框
    QTabWidget *m_editorTabMgr;
    std::vector<QWidget *> m_notSaveList;

    // 编辑框右上的按钮
    QFrame *m_tabWidgetButtonsFrame;
    QHBoxLayout *m_tabWidgetButtonsLayout;
    TabWidgetMoreButton *m_tabWidgetMoreButton;
    MarkDownPreviewAndEditButton *m_tabWidgetPreviewAndButton;
    MarkDownEditButton *m_tabWidgetEditButton;
    MarkDownPreviewButton *m_tabWidgetPreviewButton;

    // tabWidget的菜单栏
    QMenu *m_tabWidgetMoreMenu;
    QAction *m_closeAllTabAction;
    QAction *m_setFontSizeAction;
    QComboBox *m_editorTextEditChoose;

    // 提示页
    QFrame *m_firstWordFrame;
    QVBoxLayout *m_firstWordLayout;
    QLabel *m_firstWord;
    bool m_isFirstPageHide;
};

}

#endif
